﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BusinessLayer.Model.Entities;

namespace BusinessLayer.Model.Repositories.Abstract
{
    /// <summary>
    /// Interface que define los métodos que debe implementar el repositorio de fotos.
    /// </summary>
    public interface IPictureRepository
    {
        /// <summary>
        /// Devuelve una foto que concuerda con el Id especificado
        /// </summary>
        /// <param name="pictureID">Id de la foto</param>
        /// <returns>Foto</returns>
        Picture              FetchByID(Guid pictureID);
        
        /// <summary>
        /// Devuelve una lista con todas las fotos que se encuentran en el repositorio
        /// </summary>
        /// <returns>Lista de fotos</returns>
        IEnumerable<Picture> FetchAll();

        /// <summary>
        /// Agrega una foto al repositorio
        /// </summary>
        /// <param name="picture">Foto a agregar</param>
        void                 Add(Picture picture);

        /// <summary>
        /// Actualiza una foto del repositorio
        /// </summary>
        /// <param name="picture">Foto a actualizar</param>
        void                 Update(Picture picture);

        /// <summary>
        /// Borra una foto del repositorio
        /// </summary>
        /// <param name="picture">Foto a borrar</param>
        void                 Remove(Picture picture);


        /// <summary>
        /// Guarda los cambios hechos al repositorio
        /// </summary>
        void                 SubmitChanges();
    }
}
